Raspberry Pi 2でGrovePiを使う
はじめに
前回書いたはじめてのRaspberry Pi 2ではRaspberry Pi 2をセットアップしてみました。しかしRaspberry Pi 2はGPIOピンがそのまま搭載されているので、弊社にたくさんあるGroveシステムのセンサーが使えません。そこでRaspberry Pi用GroveシールドであるGrovePiを購入しました!
ということで、早速使ってみました!これがまた結構ハマりました...
やってみた
外観
上側。ポートの構成が変則的で、左側にアナログポート、真ん中と右側にデジタルポートとI2Cポートが入り混じっています。きっと小さな基盤の中にたくさんのコネクタを配置するのに苦労したんでしょうね。
下側。GPIOコネクタのみ。Dexter Industriesのロゴがカッコいいです。
Raspberry Pi 2にGrovePiを合体させたところ。無印Raspberry Piで使われいたGPIO26Pinに合わせられているため、GPIO40PinであるRaspberry Pi 2ではGPIOピンがちょっと余ります。
またこの写真の左側、イーサネットポートとUSBポートの部分がGrovePiの基盤に接触するため、GrovePiの公式サイトでは「ショートする可能性があるからマスキングテープを貼るといいよ」と書いてありました。
OS(Raspbian)のアップデート
とりあえず、OSは最新にしておきます。
$ sudo apt-get update $ sudo apt-get upgrade
GrovePiリポジトリのclone
ファームウェアのアップデートやソフトウェアのインストールに使うために、GrovePiのGithubリポジトリをgit cloneしておきます。
$ git clone https://github.com/DexterInd/GrovePi.git
GrovePiのファームウェアアップデート
GrovePiのファームウェアをアップデートします。最新のファームウェアを適用しないと、OSでi2cデバイスとして認識されませんでした。手順は公式サイトのUpdating the Firmwareに従います。
まず、リセット端子であるISPヘッダー6ピンとD4ピンをジャンパー線で繋ぎます。
次にファームウェアアップデート用のシェルスクリプトを実行します。
$ cd GrovePi/Firmware $ sudo ./firmware_update.sh
“avrdude: safemode: Fuses OK”というメッセージが出力されたら完了です。
GrovePi用ソフトウェアのインストール
次にGrovePiを操作するために必要なソフトウェアをインストールします。こちらの手順も公式サイトに従います。
$ cd GrovePi/Script/ $ sudo bash ./install.sh
インストール完了後、勝手に再起動されます。
config.txtの編集
GrovePi用ソフトウェアのインストールが完了すると、勝手に/etc/modulesを編集してくれたりして、必要なモジュールを組み込んでくれます。しかし、以下のように/boot/config.txtを編集しないと、GrovePiを認識してくれません。
# sudo vi /boot/config.txt dtparam=i2c1=on dtparam=i2c_arm=on
編集後はOSを再起動します。
# sudo reboot
再起動後、i2cdetectコマンドを実行すると、ちゃんとGrovePiをi2cデバイスとして認識してくれていることがわかります。
$ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- 04 -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Go言語環境のセットアップ
さて、個人的にRaspberry Pi 2での開発もGo言語を使いたいので、環境のセットアップを行います。Raspbianではapt-getコマンドでGo言語をインストールすることもできるのですが、残念ながらパッケージのバージョンが古いため、バージョンの新しいバイナリをダウンロードし展開しておきます。
$ wget -O - http://dave.cheney.net/paste/go1.4.linux-arm~multiarch-armv6-1.tar.gz|sudo tar -xzC /usr/local -f -
Go言語を使うための環境変数の設定を行います。
$ echo '# Setup for golang' |sudo tee /etc/profile.d/golang.sh $ echo 'PATH=$PATH:/usr/local/go/bin'|sudo tee -a /etc/profile.d/golang.sh $ echo 'export GOROOT=/usr/local/go'|sudo tee -a /etc/profile.d/golang.sh $ echo 'export GOPATH=$HOME'|sudo tee -a /etc/profile.d/golang.sh $ vi ~/.bashrc source /etc/profile.d/golang.sh
なお、Raspberry Pi 2では無く別の環境でビルドする場合には、以下のようにクロスコンパイル可能なように設定をします。
$ cd $GOROOT/src $ GOOS=linux GOARCH=arm ./make.bash --no-clean
GrovePiを動かしてみる
ようやく本題。GrovePiのD2ポートにGrove - Buttonを、D3ポートにGrove - LED Socketを接続します。書いたソースコードがこちら。
package main import ( "fmt" "github.com/DexterInd/GrovePi/Software/Go/grovepi" ) func main() { var g grovepi.GrovePi g = *grovepi.InitGrovePi(0x04) err := g.PinMode(grovepi.D2, "input") if err != nil { fmt.Println(err) } err = g.PinMode(grovepi.D3, "output") if err != nil { fmt.Println(err) } for { button, _ := g.DigitalRead(grovepi.D2) if button == 1 { g.DigitalWrite(grovepi.D3, 1) } else { g.DigitalWrite(grovepi.D3, 0) } } }
実行結果
はい、動きました!
さいごに
gobotも試してみたのですが、うまく動きませんでした。GrovePi公式のライブラリを使うのが一番簡単そうです。
これでRaspberry Pi 2でもGroveシステムのセンサーを使えるようになりましたので、いろいろ試してみたいと思います。